#ifndef T12_INC_OLED_H_
#define T12_INC_OLED_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "main.h"

#define MAX_SEG 127
#define MAX_PAGE 7

typedef enum FONT_SIZE
{
    // 小字体
    FONT_SIZE_SMALL = 0,
    // 大字体
    FONT_SIZE_BIG = 1,
} FONT_SIZE;

typedef enum LINE_ALIGN
{
    // 左边排列
    LINE_ALIGN_LEFT = 0,
    // 排列右边
    LINE_ALIGN_RIGHT = 1
} LINE_ALIGN;

extern I2C_HandleTypeDef hi2c1;

/**
 * @brief  填充4位颜色
 * @param  start_x: 起始列
 * @param  start_y: 起始行
 * @param  end_x: 终止列
 * @param  end_y: 终止行
 * @param  color: 颜色 应该为0或FF
 */
void oled_full_data(uint8_t start_x, uint8_t start_y, uint8_t end_x, uint8_t end_y, uint8_t color);

void oled_full(uint8_t data);
void oled_init();
void oled_display_char(uint8_t x, uint8_t y, uint8_t chr, FONT_SIZE size);

/**
 * @brief 在OLED中显示字符串，0.96
 *
 * 每行 小字体21个 大字体16个
 *
 * 每列 小字体可以放8个 也就是0-7
 *
 * 一个大的高为两个小的
 * @param  x                x显示的起始位置 会自动换行
 * @param  y                y的起始位置 大字体最多6行 小字体最多7行
 * @param  ch               字符串
 * @param  size         字体的大小
 */
void oled_show_string(uint8_t x, uint8_t y, const char *string, FONT_SIZE size);

void oled_show_image8(uint8_t x, uint8_t y, uint8_t index);

void oled_show_image(uint8_t x, uint8_t y, uint8_t index);

/**
 * @brief 最大为7行
 * @param  line             0-7
 */
void oled_show_image4(uint8_t x, uint8_t y, uint8_t index);
void oled_clear_line(uint8_t line);

void oled_clear(void);

/**
 * @brief  填充数据 从start 到end
 * @param  start_x: 起始x
 * @param  start_y: 起始y
 * @param  width: 填充宽度
 * @param  data: 填充内容 0xFF或0x00
 */
void oled_full_origin(uint8_t start_x, uint8_t start_y, uint8_t width, uint8_t data);

#ifdef __cplusplus
}
#endif

#endif // T12_INC_OLED_H_
